합격의 길잡이! 30년 전통의 기술자격증 전문학원 대방전기통신학원

정보통신 사회에 창의적으로 대처할 수 있는 유능한 기술 자격증 취득에 전원합격을 목표로 합니다.

상담문의
02)826-7942~3

상담가능시간 10:00 ~ 21:00
(공휴일 휴무)

게시판 뷰
전자산업기사 아두이노 관련 질문입니다
작성자
이현우
작성일
2022.05.04
첨부파일
KakaoTalk_20220504_012242747.jpg

아두이노 공개문제 1번 동작 시 센서모드에서 두 가지 문제가 있습니다.

 

1. 온도측정 시 약 70도 정도로 높게 나옵니다. 코딩이나 회로 구성에 문제가 있는지 확인 부탁드리겠습니다.

 

2.초음파 발생기의 거리를 시리얼모니터로 확인 시 계속 0cm만 찍힙니다. trig와 echo핀 번호도 계속 확인해보고 핀 숫자도 바꿔봤는데 계속 동일하네요..

 

회로 사진과 해당 아두이노 코드문 첨부합니다.(main탭, temp탭, ultra탭)

 

#include

#include

LiquidCrystal_I2C lcd(0x27, 16, 2);

#include

const int sw1_pin = 8;

const int sw2_pin = 9;

const int sw3_pin = 10;

int sw1_state = 0;

int sw2_state = 0;

int sw3_state = 0;

int sw1_flag = 0;

int sw2_flag = 0;

int sw3_flag = 0;

int sw1_old = 1;

int sw2_old = 1;

int sw3_old = 1;


int sw1_pulse_mode_flag = 0;

int sw1_sensor_mode_flag = 0;

int sw2_pulse_mode_flag = 0;

int sw2_sensor_mode_flag = 0;

int sw3_select_mode_flag = 0;


int start_mode_flag = 1;

long reset_timer = 0;


//timer,temp, cds, ultra

int timer_pin = 5;

float pw;

float peri;

int freq;

int timer_mode_flag = 0;


int temp_pin = A0;

float temp_val = 0;

float temp = 0;



int cds_pin = A1;

int cds_val = 0;

float cds_volt = 0;


int trig_pin = 2;

int echo_pin = 3;

int distance = 0;

float duration = 0;

int i = 0;

int j = 0;


byte b00[8] {00,00,00,00,00,00};

byte b16[8] {16,16,16,16,16,16};

byte b24[8] {24,24,24,24,24,24};

byte b28[8] {28,28,28,28,28,28};

byte b30[8] {30,30,30,30,30,30};

byte b31[8] {31,31,31,31,31,31};


void setup() {

  pulse_mode_setup();

  sw_mode_setup();

  ultra_mode_setup();


  lcd.createChar(0, b00);

  lcd.createChar(1, b16);

  lcd.createChar(2, b24);

  lcd.createChar(3, b28);

  lcd.createChar(4, b30);

  lcd.createChar(5, b31);


  lcd.begin();

  lcd.backlight();


}


void loop() {

  if (start_mode_flag == 1) {

    reset_mode();

    start_mode();

  }

  else

  {

    sw_mode_1();

    sw_mode_2();

    sw_mode_3();

    act_1_mode();

    pulse_mode();

    sensor_mode();

  }

}

 

 

void temp_mode(){

  temp_val=analogRead(temp_pin);

  temp=0.488155*(temp_val-20);

  delay(500);

  

    lcd.setCursor(0,0);

    lcd.print("T:");

    lcd.print(temp,2);

    lcd.print("C");

    

}

 

 

void ultra_mode_setup(){

    pinMode(trig_pin,OUTPUT);

    pinMode(echo_pin,INPUT);

    Serial.begin(9600);

}

void ultra_mode(){


  digitalWrite(trig_pin,HIGH);

  delayMicroseconds(10);

  digitalWrite(trig_pin,LOW);


  duration=pulseIn(echo_pin,HIGH);

  distance=duration/29/2;


  lcd.setCursor(0,1);

  lcd.print("U:");

  lcd.setCursor(2,1);

  lcd.print("              ");

  int i=distance/5;

  int j=distance%5;

  Serial.print(distance);

  Serial.print(" ");

  Serial.print(i);

   Serial.print(" ");

  Serial.println(j);

  

if(i>=14){

    for(int k=0;k<14;k++){

      lcd.write(5);

    }

}

  else{

    for(int k=0;k

      lcd.write(5);

    }

      lcd.write(j);

  }


}

 

 

 

댓글 1

대방학원 2022.05.04

수정

안녕하세요 대방학원입니다.
문의하신 내용과 관련하여 연락드리겠습니다.

TOP
접 기

비밀번호입력